﻿using System;
using System.Collections.Generic;

namespace Pap.Data
{
    /// <summary>
    /// 
    /// </summary>
    public interface ICustomer : IEntity
    {
        /// <summary>
        /// Gets or sets the customer ID.
        /// </summary>
        /// <value>
        /// The customer ID.
        /// </value>
        Guid CustomerID { get; set; }
        /// <summary>
        /// Gets or sets the name of the customer.
        /// </summary>
        /// <value>
        /// The name of the customer.
        /// </value>
        string CustomerName { get; set; }
        /// <summary>
        /// Gets or sets the birthdate.
        /// </summary>
        /// <value>
        /// The birthdate.
        /// </value>
        DateTime Birthdate { get; set; }
        /// <summary>
        /// Gets or sets the gender.
        /// </summary>
        /// <value>
        /// The gender.
        /// </value>
        CustomerGender Gender { get; set; }
        /// <summary>
        /// Gets or sets the SSN.
        /// </summary>
        /// <value>
        /// The SSN.
        /// </value>
        string SSN { get; set; }
        /// <summary>
        /// Gets or sets the SSN creation date.
        /// </summary>
        /// <value>
        /// The SSN creation date.
        /// </value>
        DateTime SSNCreationDate { get; set; }
        /// <summary>
        /// Gets or sets the SSN creation location ID.
        /// </summary>
        /// <value>
        /// The SSN creation location ID.
        /// </value>
        Guid SSNCreationLocationID { get; set; }
        /// <summary>
        /// Gets or sets the birth location ID.
        /// </summary>
        /// <value>
        /// The birth location ID.
        /// </value>
        Guid BirthLocationID { get; set; }
        /// <summary>
        /// Gets or sets the address.
        /// </summary>
        /// <value>
        /// The address.
        /// </value>
        string Address { get; set; }
        /// <summary>
        /// Gets or sets the current job.
        /// </summary>
        /// <value>
        /// The current job.
        /// </value>
        string CurrentJob { get; set; }
        /// <summary>
        /// Gets or sets the military status ID.
        /// </summary>
        /// <value>
        /// The military status ID.
        /// </value>
        Guid MilitaryStatusID { get; set; }
        /// <summary>
        /// Gets or sets the military postponding date.
        /// </summary>
        /// <value>
        /// The military postponding date.
        /// </value>
        DateTime? MilitaryPostpondingDate { get; set; }
        /// <summary>
        /// Gets or sets the social status ID.
        /// </summary>
        /// <value>
        /// The social status ID.
        /// </value>
        Guid SocialStatusID { get; set; }
        /// <summary>
        /// Gets or sets the educational level ID.
        /// </summary>
        /// <value>
        /// The educational level ID.
        /// </value>
        Guid EducationalLevelID { get; set; }
        /// <summary>
        /// Gets the phones.
        /// </summary>
        IEnumerable<IPhone> Phones { get; }
        /// <summary>
        /// Gets or sets the educational level.
        /// </summary>
        /// <value>
        /// The educational level.
        /// </value>
        ILookUpEntity EducationalLevel { get; set; }
        /// <summary>
        /// Gets the issue place obj.
        /// </summary>
        IIssuePlace IssuePlaceObj { get; }
        /// <summary>
        /// Gets or sets the social statuse.
        /// </summary>
        /// <value>
        /// The social statuse.
        /// </value>
        ILookUpEntity SocialStatuse { get; set; }
        /// <summary>
        /// Gets the birth location obj.
        /// </summary>
        ICenter BirthLocationObj { get; }

        /// <summary>
        /// Gets the loans.
        /// </summary>
        IEnumerable<ICustomerLoan> Loans { get; }
        /// <summary>
        /// Adds the phone.
        /// </summary>
        /// <param name="phone">The phone.</param>
        void AddPhone(IPhone phone);
    }

    /// <summary>
    /// 
    /// </summary>
    public enum CustomerGender
    {
        /// <summary>
        /// 
        /// </summary>
        Male = 1,
        /// <summary>
        /// 
        /// </summary>
        Female = 0
    }

}
